Principles of public key cryptography